Now unicode header will be detected within 'gbfgetstr'.
gbfile *file_in;
file_in = gbfopen(arcfileopt, "r", MYNAME);
- (void) gbfunicode(file_in); /* check for unicode text file */
lat1 = lon1 = lat2 = lon2 = BADVAL;
while ((line = gbfgetstr(file_in))) {
compegps_rd_init(const char *fname)
{
fin = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
input_datum = DATUM_WGS84;
}
char *cin = buff;
char *ctail;
- line++;
+ if ((line++ == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
cin = lrtrim(buff);
if (strlen(cin) == 0) continue;
cst_rd_init(const char *fname)
{
fin = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
temp_route = NULL;
}
{
char *cin = buff;
- line++;
+ if ((line++ == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
cin = lrtrim(buff);
if (strlen(cin) == 0) continue;
}
while ((buff = gbfgetstr(xcsv_file.xcsvfp))) {
+ if ((linecount == 0) && xcsv_file.xcsvfp->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+
linecount++;
/* Whack trailing space; leading space may matter if our field sep
* is whitespace and we have leading whitespace.
rd_init(const char *fname)
{
fin = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
gardown = 1;
mode = wptdata;
char *cin = buff;
char *cdata;
- line++;
+ if ((line++ == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
cin = lrtrim(buff);
if (!*cin) continue;
memset(>xt_flags, 0, sizeof(gtxt_flags));
fin = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
memset(&header_ct, 0, sizeof(header_ct));
datum_index = -1;
while ((buff = gbfgetstr(fin))) {
char *cin;
- current_line++;
+ if ((current_line++ == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+
cin = lrtrim(buff);
if (*cin == '\0') continue;
if (file->unicode) return gbfgetucs2str(file);
for (;;) {
- char c = gbfgetc(file);
+ int c = gbfgetc(file);
if ((c == EOF) || (c == 0x1A)) {
if (len == 0) {
else if (c == '\n') {
break;
}
+ else if (((c == 0xFE) || (c == 0xFF)) && (! file->unicode_checked)) {
+ int cx;
+ int c1 = gbfgetc(file);
+ if (c1 != EOF) {
+ cx = c | (c1 << 8);
+ if (cx == 0xFEFF) {
+ file->unicode = 1;
+ file->big_endian = 0;
+ return gbfgetucs2str(file);
+ }
+ else if (cx == 0xFFFE) {
+ file->unicode = 1;
+ file->big_endian = 1;
+ return gbfgetucs2str(file);
+ }
+ else gbfungetc(c1, file);
+ }
+ }
+
+ file->unicode_checked = 1;
+
if (len == file->linesz) {
file->linesz += 64;
result = file->line = xrealloc(file->line, file->linesz + 1);
}
- result[len] = c;
+ result[len] = (char)c;
len++;
}
result[len] = '\0'; // terminate resulting string
return (len + 1);
}
-int
-gbfunicode(gbfile *file)
-{
- if (! file->unicode_checked) {
- int c;
- size_t pos;
-
- file->unicode_checked = 1;
-
- pos = gbftell(file);
- gbfrewind(file);
-
- c = gbfgetc(file);
- if (c == EOF) return 0;
-
- if ((c != 0xFE) && (c != 0xFF)) {
- if (pos) gbfseek(file, pos, SEEK_SET);
- return 0;
- }
- c = c | (gbfgetc(file) << 8);
-
- if (c == 0xFEFF) file->big_endian = 0;
- else if (c == 0xFFFE) file->big_endian = 1;
- else {
- if (pos) gbfseek(file, pos, SEEK_SET);
- return 0;
- }
- file->unicode = 1;
- if (pos != 0) gbfseek(file, pos, SEEK_SET);
- }
- return file->unicode;
-}
-
/* Thats all, sorry. */
int gbfputcstr(const char *s, gbfile *file); // write string including '\0'
int gbfputpstr(const char *s, gbfile *file); // write as pascal string
-int gbfunicode(gbfile *file);
#endif
if (global_opts.debug_level > 1) fprintf(stderr,"setting minspeed to %5.1lf km/h and maxspeed to %5.1lf km/h\n",minspeed,maxspeed);
fin = gbfopen(fname, "r", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
memset(buff,0,sizeof(buff));
if (optdate)
line=0;
while ((buff = gbfgetstr(fin)))
{
+ if ((line == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+
str = buff = lrtrim(buff);
if (*buff == '\0') continue;
if (gopal_check_line(buff)!=8)continue;
rd_init(const char *fname)
{
file_in = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
}
static void
char alttype;
char icon[3];
waypoint *wpt_tmp;
-
+ int line = 0;
/*
* Make sure that all waypoints in single read have same
* timestamp.
while ((ibuf = gbfgetstr(file_in))) {
int n, len;
char *sn;
+
+ if ((line++ == 0) && file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+
/* A sharp in column zero or an blank line is a comment */
ibuf = lrtrim(ibuf);
len = strlen(ibuf);
static char manufacturer[4];
static const route_head *head;
static char *timeadj = NULL;
+static int lineno;
#define MYNAME "IGC"
#define MAXRECLEN 79 // Includes null terminator and CR/LF
char *c;
retry:
*rec = c = gbfgetstr(file_in);
+ if ((lineno++ == 0) && file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
if (c == NULL) return rec_none;
len = strlen(c);
char *ibuf;
file_in = gbfopen(fname, "r", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
-
+ lineno = 0;
// File must begin with a manufacturer/ID record
if (get_record(&ibuf) != rec_manuf_id || sscanf(ibuf, "A%3[A-Z]", manufacturer) != 1) {
fatal(MYNAME ": %s is not an IGC file\n", fname);
char **argv2;
fin = gbfopen(filename, "r", "main");
- (void) gbfunicode(fin); /* check for unicode text file */
while ((str = gbfgetstr(fin))) {
str = lrtrim(str);
if ((*str == '\0') || (*str == '#')) continue;
rd_init(const char *fname)
{
file_in = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
macstumbler = 0;
}
long flags = 0;
int speed = 0, channel = 0;
struct tm tm;
+ int line = 0;
memset(&tm, 0, sizeof(tm));
char *field;
int field_num, len, i, stealth = 0;
+ if ((line++ == 0) && file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
ibuf = lrtrim(ibuf);
/* A sharp in column zero might be a comment. Or it might be
* something useful, like the date.
read_mode = rm_file;
file_in = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
}
static void
line++;
+ if ((line == 0) & file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+
if ((line == 0) && (case_ignore_strncmp(ibuf, "@SonyGPS/ver", 12) == 0)) {
/* special hack for Sony GPS-CS1 files:
they are fully (?) nmea compatible, but come with a header line like
char *buff;
char *str, *c;
int column;
+ int line = 0;
char *zip1, *zip2, *city, *street, *number;
route_head *route;
while ((buff = gbfgetstr(fin)))
{
+ if ((line++ == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
str = buff = lrtrim(buff);
if (*buff == '\0') continue;
nmn4_rd_init(const char *fname)
{
fin = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
}
static void
void ovl_rd_init(char const *fname)
{
fpin = gbfopen(fname, "r", MYNAME);
- if (gbfunicode(fpin)) cet_convert_init(CET_CHARSET_UTF8, 1);
}
#define SECTION_NONE 0
route_head *route_head = NULL;
waypoint *wpt;
int sym_cnt;
+ int lineno = 0;
groups = NULL;
groups_cnt = 0;
isSection = SECTION_NONE;
while ((line = gbfgetstr(fpin)))
{
+ if ((lineno == 0) && fpin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+ lineno++;
line = lrtrim(line);
if( (pstr = strstr(line,"[Symbol "))!= NULL)
{
rd_init(const char *fname)
{
file_in = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
mkshort_handle = mkshort_new_handle();
ozi_init_units(0);
int linecount = 0;
while ((buff = gbfgetstr(file_in))) {
- linecount++;
+
+ if ((linecount++ == 0) && file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
/*
* this is particularly nasty. use the first line of the file
rd_init(const char *fname)
{
file_in = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
}
static void
char tbuf[20];
char nbuf[20];
int points;
+ int line = 0;
read_as_degrees = 0;
points = 0;
char *ibuf = lrtrim(buff);
char *cp;
+ if ((line++ == 0) && file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+
switch (ibuf[0]) {
case 'W':
time[0] = 0;
gbfile *file_in;
file_in = gbfopen(polyfileopt, "r", MYNAME);
- (void) gbfunicode(file_in); /* check for unicode text file */
olat = olon = lat1 = lon1 = lat2 = lon2 = BADVAL;
while ((line = gbfgetstr(file_in))) {
rd_init(const char *fname)
{
fin = gbfopen(fname, "r", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
lineno = 0;
route = NULL;
while ((buf = gbfgetstr(fin)))
{
char *cin = lrtrim(buf);
- lineno++;
+ if ((lineno++ == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
if (*cin == '\0') continue;
stmwpp_rd_init(const char *fname)
{
fin = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
track = NULL;
route = NULL;
wpt = NULL;
stmwpp_data_read(void)
{
char *buff;
+ int line = 0;
what = STM_NOTHING;
buff = gbfgetstr(fin);
int column = -1;
struct tm time;
+ if ((line++ == 0) && fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
+
buff = lrtrim(buff);
if (*buff == '\0') continue;
rd_init(const char *fname)
{
file_in = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
mkshort_handle = mkshort_new_handle();
}
char icon[100];
char *ibuf;
waypoint *wpt_tmp;
+ int line = 0;
while ((ibuf = gbfgetstr(file_in))) {
+ if ((line++ == 0) && file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
if( sscanf(ibuf, "%lf,%lf:%100[^:]:%100[^\n]",
&lon, &lat, icon, desc)) {
wpt_tmp = waypt_new();
rd_init(const char *fname)
{
file_in = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(file_in)) cet_convert_init(CET_CHARSET_UTF8, 1);
}
static void
int linecount = 0;
while ((buff = gbfgetstr(file_in))) {
- linecount++;
+ if ((linecount++ == 0) && file_in->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
/* skip the line if it contains "sHyperLink" as it is a header (I hope :) */
if ((strlen(buff)) && (strstr(buff, "sHyperLink") == NULL)) {
fin = gbfopen(fname, "rb", MYNAME);
- if (gbfunicode(fin)) cet_convert_init(CET_CHARSET_UTF8, 1);
-
if ((c = gbfgetstr(fin)))
unicsv_fondle_header(c);
else
unicsv_fieldsep = NULL;
+ if (fin->unicode) cet_convert_init(CET_CHARSET_UTF8, 1);
}
static void
xcsv_file_init();
fp = gbfopen(fname, "rb", MYNAME);
- (void) gbfunicode(fp);
while ((sbuff = gbfgetstr(fp))) {
sbuff = lrtrim(sbuff);
xcsv_parse_style_line(sbuff);
}
xcsv_file.xcsvfp = gbfopen(fname, "r", MYNAME);
- if (gbfunicode(xcsv_file.xcsvfp)) cet_convert_init(CET_CHARSET_UTF8, 1);
xcsv_file.gps_datum = GPS_Lookup_Datum_Index(opt_datum);
is_fatal(xcsv_file.gps_datum < 0, MYNAME ": datum \"%s\" is not supported.", opt_datum);
}
{
if (fname) {
ifd = gbfopen(fname, "r", MYNAME);
- (void) gbfunicode(ifd);
if (offset) {
gbfseek(ifd, offset, SEEK_SET);
}